package com.dd.stack.mybatisplus.mapper.multi_table;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dd.stack.mybatisplus.pojo.BO.OrderDTO;
import com.dd.stack.mybatisplus.pojo.BO.OrderDetailDTO;
import com.dd.stack.mybatisplus.pojo.BO.OrderStatsDTO;
import com.dd.stack.mybatisplus.pojo.BO.OrderWithUserDTO;
import com.dd.stack.mybatisplus.pojo.DO.multi_table.Order;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author liuxianmeng
 * @CreateTime 2025/2/25 0:31
 * @Description OrderMapper
 */
@Mapper
@DS("master")
public interface OrderMapper extends BaseMapper<Order> {
    /**
     * 查询订单详情及用户信息
     * @param orderId 订单ID
     * @return OrderDetailDTO
     */
    OrderDetailDTO getOrderDetailsWithUserInfo(Long orderId);

    /**
     * 分页查询订单及其用户信息
     * @param params 查询参数（Map）
     * @return List<OrderWithUserDTO>
     */
    List<OrderWithUserDTO> getOrdersWithUsers(@Param("params") Map<String, Object> params);

    /**
     * 查询每个用户的订单统计信息
     * @return List<OrderStatsDTO>
     */
    List<OrderStatsDTO> getOrderStatsByUser();

    /**
     * 根据条件搜索订单
     * @param params 查询参数（Map）
     * @return List<OrderDTO>
     */
    List<OrderDTO> searchOrders(@Param("params") Map<String, Object> params);

    /**
     * 更新订单状态
     * @param orderId 订单ID
     * @param status 新状态
     */
    void updateOrderStatus(@Param("orderId") Long orderId, @Param("status") Integer status);

    /**
     * 分页查询订单及其用户信息
     * @param page 分页参数
     * @param params 查询条件
     * @return 分页结果
     */
    IPage<OrderWithUserDTO> getOrdersWithUsersByPage(Page<?> page, @Param("params") Map<String, Object> params);
}